/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: sunj
 * <p>
 * 文件名:ISysDeptDao.java
 * <p>
 * 类产生时间: 2012-5-31 上午16:30:25
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.dao;

import java.util.List;
import java.util.Map;

import com.oceansoft.core.common.util.Pagination;
import com.oceansoft.core.domain.SysDept;
import com.oceansoft.core.domain.SysUser;

public interface ISysDeptDao {

	/**
	 * 根据部门父编号获取所有部门信息
	 */
	public List<SysDept> findAllDept(String parentId,int isparentid);
	
	/**
	 * 查询所以一级部门
	 * @return
	 */
	public List<SysDept> findAllDept(SysUser user);
	
	/**
	 * 根据部门编号查询部门信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @return list
	 */
	public List<SysDept> findDeptByDeptId(String deptId);
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	 * 找出系统中所有部门
	 * @return
	 */
	public List<SysDept> findAllAsyncDept();
	
	/**
	 * 后台管理员获取所有部门信息
	 */
	public List<SysDept> findAllDept(String deptId, String path);

	/**
	 * 通过部门Id获取人员信息
	 * 
	 * @param id
	 *            部门编号
	 */
	public List<SysUser> findUserByDeptId(String id);

	/**
	 * 通过parentId 查询是否有子节点
	 * 
	 * @param pId
	 *            父节点编号
	 * @return list
	 */
	public List<SysDept> findDeptByPid(String pId);


	/**
	 * 根据部门编号查询部门信息，不包含parentName
	 * 
	 * @param deptId
	 *            部门编号
	 * @return list
	 */
	public List<SysDept> findDeptById(String deptId);

	/**
	 * 根据部们编号 分页显示部门信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @param pageIndex
	 *            当前索引页
	 * @return pagination
	 */
	public Pagination<SysDept> findDeptByPagination(String deptId, int pageIndex);

	/**
	 * 根据部门编号删除部门信息
	 * 
	 * @param deptId
	 *            部门编号
	 */
	public int deleteDeptByDeptId(String deptId);

	/**
	 * 根据查询条件模糊查询
	 * 
	 * @param params
	 *            存放的查询条件键值对
	 * @param pageIndex
	 * @return
	 */
	public Pagination<SysDept> fuzzyQuery(Map<String, String> params, int pageIndex);

	/**
	 * 新增部门
	 * 
	 * @param dept
	 */
	public int add(SysDept dept);

	/**
	 * 部门编辑保存
	 * 
	 * @param dept
	 */
	public int saveEdit(SysDept dept);

	/**
	 * 根据数据库id查找
	 * 
	 * @author 余超
	 * @param dbId
	 * @return
	 */
	public SysDept findByDbId(long dbId);

	/**
	 * 根据部门编号查询所有的父部门编号，不包含root，但是包含自身
	 * 
	 * @param deptId
	 * @return
	 */
	List<String> findParents(String deptId);
	
	/**
	 * 根据部门编号查询所有的父部门编号，从指定的层级开始，但是包含自身
	 * @param deptId
	 * @param deep
	 * @return
	 */
	List<String> findParents(String deptId, int deep);

	/**
	 * 查询子部门数
	 * 
	 * @param deptId
	 * @return
	 */
	public int findChindrenCount(String deptId);

	/**
	 * 根据父亲编号得到所有排序之后的自部门编号
	 * 
	 * @param parentId
	 * @return
	 */
	public List<String> getDeptId(String parentId);

	/**
	 * 改变orderNum 和targetNum之间的排序序号
	 * 
	 * @param orderNum
	 *            被拖动的排序序号
	 * @param targetNum
	 *            目标序号
	 * @param deptId
	 *            被拖动的部门编号
	 */
	public void updateOrderNums(int orderNum, int targetNum, String deptId);

	/**
	 * 改变orderNum排序序号
	 * 
	 * @param targetNum
	 *            目标序号
	 * @param deptId
	 *            被拖动的部门编号
	 */
	public void updateOrderNum(int targetNum, String deptId);

	/**
	 * 根据应用系统编号查找
	 * 
	 * @param appId
	 * @return
	 */
	public List<SysDept> findDeptsByAppId(String appId);

	/**
	 * 修改parentid
	 * 
	 * @param oldParent
	 * @param newParent
	 */
	public void updateChildren(String oldParent, String newParent);
	
	/**
	 *查找子孙部门信息 （包括自身） 
	 * @param deptId
	 * @return
	 */
	List<SysDept> findChildren(String deptId);
	
	/**
	 * 查找子孙部门编号
	 * @param deptId
	 * @return
	 */
	List<String> findChildrenId(String deptId);

	List<SysDept> findParentDepts(String deptId);

	/**
	 * 根据部门编号获取部门信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @return
	 */
	List<SysDept> findDeptInfoByDeptId(String deptId);

	/**
	 * 获取orderNum
	 * 
	 * @param parentId
	 * @return
	 */
	int getOrderNumber(String parentId);

	/**
	 * 加载所有同步组织机构信息列表
	 * 
	 * @return
	 */
	List<SysDept> findAllSyncDept();

	Pagination<SysDept> findNameByPagination(String deptId, int pageIndex);
	/**
	 * 前台通讯录模块查询部门，把直属部门放到和区分局同一级
	 * @return
	 */
	public List<SysDept> findContactDepts(String iconPath);

	/**
	 * 部门新增的时候判断名称和简称都不能重复
	 * @param dept
	 * @return
	 */
	public int findCountByNameAlias(SysDept dept);

	public List<SysDept> findByJpin(String jpin);
    public String findDeptByAlias(String alias);
   /**
    * 同步一级单位信息
    * @return
    */
	public List<SysDept> updateOrganizationInfo();
    /**
     * 同步更新的一级单位的总人数
     * @param list
     */
    public void updateUserTotal(List<SysDept> list);
   /**
    * 查询二级部门
    * @param dw1
    * @param dw2
    * @return
    */
	public List<SysDept> findByDw1AndDw2(String dw1, String dw2);
/**
 * 验证一级部门
 * @param dw1
 * @return
 */
public SysDept selDeptInfo(String dw1);
/**
 * 查询所有子部门
 * @return
 */
public List<SysDept> findAllSubDept(String deptId);

public List<SysDept> _findByJpin(String jpin);

	int finddeptcount(String parentId);

	SysDept findByParentAndName(String deptId, String name);
}
